Throughout the history of computer systems and the programs executed by computer systems, computer programmers have aspired to produce programming code that is both efficient and meticulous. Automation of real world functions and calculations can be performed in breathtaking speed by modern computer systems. In recent history, computer systems have been programmed to defeat chess grandmasters and trivia geniuses. They have been programmed to calculate intricate weather patterns and patterns of internet usage.
Powerful computer systems are ubiquitous; they are being used to control international banking systems, healthcare systems, systems of transport and educational networks. Computers gathered in a server farm can contain all the banking records for an international bank or all the healthcare records of a country. It has become more vital than ever for these computer systems to have accurate and efficient programs running on them.
The first known use of the term “bug” as referring to a computer system or programming error was popularized by a moth being trapped in a Mark II computer system relay in 1947, thereby causing a malfunction. Since that time, computer bugs have been credited with numerous human casualties and monetary loss.
Modern computer systems execute vast amounts of programming code each second, and each line of programming code is susceptible to many types of bugs. Bugs can be arithmetic (e.g. division by zero, careless rounding), logical (e.g. infinite loops), incorrect syntax, resource, interface and performance in nature. Programming bugs are found, validated (e.g. reproducible) and fixed (e.g. patched) through a process called debugging.
Debugging systems, tools and software are not new. Debugging tools can include execution monitors, specified breaking and adjusting memory values. High level programming languages have built in debugging features (e.g. exception handling) allowing for automated error detection. Static code analysis tools may include sets of hundreds of known program code problems and can be designed for a specific programming language or many programming languages. Programming code found on an embedded system can be debugged with an in-circuit emulator.
Computer systems regularly interact with many types of data sources and data sinks, each with unpredictable behavior. When interacting with an external data source, a computer system must be programmed specifically for the device. To interact with an external device, the computer system must have prior knowledge of the expected behavior of such a device and there must also be an ability to test a computer system program code for compatibility with the device. Anomalies and/or discrepancies in a computer system program code must be debugged to ensure device compatibility. This may be accomplished by testing the code within a controlled testing environment with an ability to simulate any internal and external device, system or program.
When a computer system is executing vast amounts of program code, the task of debugging becomes proportionally vast. Therefore, an adequate code testing environment must be based on succinct programming while remaining powerful and robust. The code testing environment must be compatible with many computer systems and programming languages. Ideally, a robust testing environment should be compatible with all objects and function types and should be able to test program code while compiling and during runtime.
There is thus a need in the field of computer program development for improved methods, circuits, apparatus, systems and associated software modules for evaluating code behavior.